﻿
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

/// <summary>
/// Ações que o usuário irá realizar com o banco
/// </summary>
/// 
namespace PetShopService{
    public class UsuarioServicos{   
   
        BancoEntities oBanco = new  BancoEntities();
        //Guarda e Recupera DA SESSION o Usuário LOGADO
        public Usuario usuarioLogado {
            get {
                if (HttpContext.Current.Session["USUARIO_LOGADO"] == null)
                    return null;
                return (Usuario)HttpContext.Current.Session["USUARIO_LOGADO"];
            }
            set {
                    HttpContext.Current.Session["USUARIO_LOGADO"]  = value;
            }
        }

        //Adiciona um novo usuário COMUM no banco
        public void CadastraUsuario(string nome, string email, string senha, int idUsuario, string endereco){
            
            Usuario oUsuario = RetornaUsuario(idUsuario);

            if (oUsuario == null) {
                oUsuario = new Usuario();
                oBanco.Usuario.Add(oUsuario);
            }

            TipoUsuario oTipoUsuario = oBanco.TipoUsuario.SingleOrDefault(t => t.idTipoUsuario == 2);

            if (oTipoUsuario == null)
                throw new Exception("É necessário cadastrar os tipos de usuário 1-ADM, 2 - USARIO");

            oUsuario.nome = nome;
            oUsuario.email = email;
            oUsuario.endereco = endereco;
            oUsuario.senha = senha;
            oUsuario.TipoUsuario = oTipoUsuario;
            
            oBanco.SaveChanges();
        }

        public bool isUsuarioAdministrador() {
            if (usuarioLogado == null)
                return false;
            return usuarioLogado.idTipoUsuario == 1;
        }

        //Retorna usuário do banco
        public Usuario RetornaUsuario(int idUsuario) {
            return oBanco.Usuario.SingleOrDefault(u => u.idUusario == idUsuario);
        }

        //Retorna usuário do banco
        public Usuario RetornaUsuario(string email) {
            return oBanco.Usuario.SingleOrDefault(u => u.email == email);
        }

        //Verifica se LOGIN e SENHA digitados são validos
        //Se é valido retorna TRUE se não forem validos retorna FALSE
        public bool LoginSenhaValidos (string email, string senha) {
            Usuario oUsuario = oBanco.Usuario.Where(u => u.email == email && u.senha == senha).FirstOrDefault();
             if(oUsuario == null)
                return false;

            usuarioLogado = oUsuario;
            return true;
        }

        public bool IsUsuarioCliente(string email, string senha) {
            Usuario oUsuario = oBanco.Usuario.SingleOrDefault(u => u.email == email && u.senha == senha && u.TipoUsuario.idTipoUsuario == 2);
            if (oUsuario == null)
                return false;
            return true;
        }

        public void DeslogarUsuario(){
            usuarioLogado = null;
        }
    }
}